JSON解析

DataWorks数据集成实时ETL支持JSON解析组件使用,可以在来源与去向组件间新增JSON解析组件,对来源侧的JSON数据解析成相应的表数据。

前提条件

  • 已完成数据集成的基本配置与网络资源配置。

  • 数据集成的同步类型为单表实时。

创建并配置JSON解析组件

步骤一:配置数据集成任务

  1. 新建数据源,详情请参见:创建并管理数据源

  2. 新建数据集成任务,详情请参见:数据集成侧同步任务

    说明

    当数据集成侧同步任务的同步类型为单表实时,可在数据来源组件与数据去向组件之间新增数据处理组件。详情可参见支持的数据源及同步方案

步骤二:添加JSON解析组件

  1. 在实时ETL任务编辑页DAG画布中,单击来源去向组件之间的image按钮,新增选择JSON解析组件。

  2. 配置JSON解析组件。

    增加JSON解析固定字段

    • 获取JSON格式化数据。

      获取JSON方式

      说明

      图示

      解析JSON固定字段。

      单击增加JSON解析固定字段打开JSON解析固定字段弹窗,通过选择来源字段后,单击获取JSON数据结构后获取JSON数据结构。

      image

      手动上传字段JSON。

      单击增加JSON解析固定字段打开JSON解析固定字段弹窗,由于无法顺利获取到上游字段取值,或获取到的字段取值不符合JSON规范,则需要单击JSON文本编辑按钮,在弹出的JSON文本编辑弹窗内手动输入JSON内容,单击确定来格式化上传的JSON内容。

      image

      解析叶子节点

      • 在格式化展示JSON数据结构中单击image选择叶子字段,会自动在固定输出字段中添加一条对应的解析配置。image

      • JSON解析叶子节点生成表格示例。

      • image

      解析JSON对象

      在格式化展示JSON数据结构中选择要解析的目标字段,选择JSON对象时,会出现弹窗,可选择如下解析方式:

      • 添加json object内每一个key-value为单独字段,其中key为字段名,赋值为其对应的value。

      • 添加json object整体为一个字段,取值为对象的json string。

      • 选项

        图示操作

        解析效果展示

        以图示操作中的JSON为例,单击address字段后的image按钮,在弹窗内选择添加json object内每一个key-value为单独字段,其中key为字段名,赋值为其对应的value

        则会解析出三个字段:streetcityzip,分别赋值于这三个字段值

        image

        image

        image

        以图示操作中的JSON为例,单击address字段后的image按钮,在弹窗内选择添加json object整体为一个字段,取值为对象的json string

        会将整个address解析成为一个完整的一条数据,赋值内容包含了streetcityzip三个字段。

        image

        image

        image

      解析JSON数组

      在格式化展示JSON数据结构中选择要解析的目标字段,选择JSON数组时,会出现弹窗,可选择如下解析方式:

      • 添加数组为多行输出。

      • 添加数组整体为一个字段,取值为数组的 JSON string。

      选项

      图示操作

      解析效果展示

      以图示操作中的JSON为例,单击array1和array2字段后的image按钮,选择在弹窗内选择添加数组为多行输出

      说明

      如果数组内还是key:value对,且value还是一个数组,这块不会解析到value中的数组值。

      image

      image

      image

      以图示操作中的JSON为例,单击array字段后的image按钮,选择添加数组整体为一个字段,取值为数组的json string

      image

      image

      image

    • 手动新增字段,指的是当无法顺利获取上游字段取值时,也没有通过单击JSON文本编辑按钮手动上传字段JSON内容情况下手动定义固定字段解析规则,通过手动编辑取值内容的方式,来获取JSON内容,手动新增的详细参数如下:

      参数

      说明

      字段名

      解析得到的新字段在下游节点的引用名。

      取值

      用来指定JSON解析路径,解析语法如下:

      • $:表示根节点。

      • . :表示子节点。

      • [][number]表示数组下标,从0开始。

      • [*]:展开数组多行输出,每个元素与记录其他字段组装成独立一行记录往下游节点输出。

      说明

      JSON解析路径中的JSON字段名只允许字母、数字、中划线“-”和下划线“_”。

      默认值

      当上游表字段发生变化导致JSON取值路径不存在时的默认值。

      • NULL:字段赋值为NULL。

      • 不填充:字段不填充任何值,与选择NULL效果的区别在于写入目标表对应字段时,如果目标字段配置了默认值,则会使用这个默认值,而不是NULL。

      • 脏数据:计入同步任务脏数据统计并根据脏数据容忍配置决定是否异常退出。

      • 手动输入常量:使用手动输入常量作为字段赋值。

      image

    增加JSON解析动态字段

    • 获取JSON格式化数据。

      获取JSON方式

      说明

      图示

      解析JSON动态输出字段

      单击增加JSON解析动态字段打开JSON解析动态输出字段弹窗,通过选择来源字段后,单击获取JSON数据结构后获取JSON数据结构。

      image

      手动上传字段JSON

      单击增加JSON解析动态字段打开JSON解析动态输出字段弹窗,由于无法顺利获取到上游字段取值,或获取到的字段取值不符合JSON规范,则需要单击JSON文本编辑按钮,在弹出的JSON文本编辑弹窗内手动输入JSON内容,单击确定来格式化上传的JSON内容。

      image

    • 动态解析JSON对象

      • 在格式化展示的JSON内容中选择要做动态解析的目标JSON对象字段,系统会自动在固定输出字段中添加JSON对象下每个字段的解析配置。

      • 设置动态解析JSON对象,在同步任务实际运行中,会将每条指定路径下的JSON对象的每个字段,以原JSON字段名和字段值用STRING类型添加到记录中往下游节点输出,这样在同步运行过程中,当指定的JSON对象结构发生了变化或新增字段时,也能自动识别并向下游输出。

      • 详情可参考下图:

        解析对象变化前

        image

        解析对象变化后

        image

      • 解析效果展示。

        _value_(STRING)

        c1(STRING)

        c2(STRING)

        c3(STRING)

        {
            "dynamic": {
                "c1": 2,
                "c2": ["a1","b1"]
            }
        }

        2

        ["a1","b1"]

        未填充

        {
            "dynamic": {
                "c1": 2,
                "c2": ["a1","b1"],
                "c3": {"name": "jack"}
            }
        }

        2

        ["a1","b1"]

        {"name": "jack"}

    • 手动新增字段

      手动新增字段,指的是当无法顺利获取上游子字段取值时,也没有通过单击JSON文本编辑按钮手动上传字段JSON内容情况下手动定义固定字段解析规则,通过手动编辑取值内容的方式自定义动态字段解析规则:

      参数

      描述

      指定JSON对象

      指定JSON对象解析路径,解析语法如下:

      • $:表示根节点。

      • . :表示子节点。

      • []:[number]表示数组下标,从0开始。

      注:JSON解析路径中的JSON字段名只允许字母、数字、中划线"-"和下划线"_"。

      默认值

      指定当指定的JSON解析路径解析失败,或者对应字段不存在时的默认行为。

      • 忽略:不做动态解析。

      • 脏数据:计入同步任务脏数据统计并根据脏数据容忍配置决定任务是否异常退出。

    • 发现与已有字段重名时策略。

      JSON动态字段按照key-value做展开时,只展开第一层,如果后展开的字段发现已有同名字段时需要采取的策略。策略详情如下:

      • 覆盖:以后展开的value取代已有字段value。

      • 丢弃:保持已有字段的value,丢弃后展开的value。

      • 报错:任务报错,停止运行。

后续操作

完成来源信息JSON解析以及去向信息的配置后,可单击右上角的模拟运行,对数据集成任务进行模拟运行,以便查看输出数据结果,是否符合您的需求。